/**
 * ReportGear(2011)
 */
package com.reportgear.report.data.datasource;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import com.reportgear.report.core.api.idname.DefaultIdName;
import com.reportgear.report.core.api.idname.IdName;

/**
 * Javascript数据源，电信人力资源使用数据
 * 
 * @version 1.0 2011-7-26
 * @author <a herf="lexloo@gmail.com">lexloo</a>
 * @since Report 1.0
 */
public class JsDataSource {
	/**
	 * 数据源Id
	 */
	private String id;

	/**
	 * 数据源标签
	 */
	private String caption;

	/**
	 * 数据源链接地址，通过JS访问
	 */
	private String url;

	/**
	 * 字段
	 */
	private List<IdName<String>> fields;

	/**
	 * 构造函数
	 */
	public JsDataSource(String id, String caption) {
		this.id = id;
		this.caption = caption;

		this.fields = new ArrayList<IdName<String>>();
	}

	/**
	 * 设置数据源Id
	 * 
	 * @param id
	 *            id
	 */
	public void setId(String id) {
		this.id = id;
	}

	/**
	 * 数据源Id
	 * 
	 * @return 数据源Id
	 */
	public String getId() {
		return id;
	}

	/**
	 * 设置标签
	 * 
	 * @param caption
	 *            标签
	 */
	public void setCaption(String caption) {
		this.caption = caption;
	}

	/**
	 * 获取标签
	 * 
	 * @return 标签
	 */
	public String getCaption() {
		return caption;
	}

	/**
	 * 设置数据源地址
	 * 
	 * @param url
	 *            数据源地址
	 */
	public void setUrl(String url) {
		this.url = url;
	}

	/**
	 * 
	 * @return 数据源地址
	 */
	public String getUrl() {
		return url;
	}

	/**
	 * 获取所有字段
	 * 
	 * @return 所有字段
	 */
	public List<IdName<String>> getFields() {
		return Collections.unmodifiableList(fields);
	}

	/**
	 * 添加字段
	 * 
	 * @param id
	 *            id
	 * @param caption
	 *            标签
	 */
	public void addField(String id, String caption) {
		this.fields.add(new DefaultIdName<String>(id, caption));
	}

	@Override
	public String toString() {
		StringBuilder sb = new StringBuilder();

		sb.append("ID:");
		sb.append(this.id);
		sb.append("\n标签:");
		sb.append(this.caption);
		sb.append("\n服务地址:");
		sb.append(this.url);
		sb.append("\n字段集:");

		for (IdName<String> in : this.fields) {
			sb.append("\n");
			sb.append(in);
		}

		return sb.toString();
	}
}
